package com.zyd.blog.file;

import com.zyd.blog.file.entity.VirtualFile;
import org.springframework.web.multipart.MultipartFile;

import java.io.File;
import java.io.InputStream;

/**
 * @author yadong.zhang (yadong.zhang0415(a)gmail.com)
 * @version 1.0
 * @website https://www.zhyd.me
 * @date 2019/2/11 13:29
 * @since 1.8
 */
public interface FileUploader {

    /**
     * 上传文件
     *
     * @param file       待上传的文件流
     * @param uploadType 文件上传类型，用来区分文件
     * @param suffix     文件后缀
     * @param save       是否保存
     */
    VirtualFile upload(InputStream file, String uploadType, String suffix, boolean save);

    /**
     * 上传文件
     *
     * @param file       待上传的文件
     * @param uploadType 文件上传类型，用来区分文件
     * @param save       是否保存
     */
    VirtualFile upload(File file, String uploadType, boolean save);

    /**
     * 上传文件
     *
     * @param file       待上传的文件
     * @param uploadType 文件上传类型，用来区分文件
     * @param save       是否保存
     */
    VirtualFile upload(MultipartFile file, String uploadType, boolean save);


    /**
     * String uploadType, boolean save
     *
     * @param file
     * @param uploadType
     * @param save
     * @param isWatermark
     * @param watermarkText
     * @return
     */
    VirtualFile uploadWatermarkImage(MultipartFile file, String uploadType, boolean save,
                                     boolean isWatermark, String watermarkText);

    /**
     * 上传水印缩略图
     * @param file
     * @param uploadType
     * @param save
     * @param width
     * @param height
     * @param isWatermark
     * @param watermarkText
     * @return
     */
    VirtualFile uploadThumbnailWatermarkImage(MultipartFile file, String uploadType, boolean save,
                                              int width, int height, boolean isWatermark, String watermarkText);

    /**
     * 上传轮播图和封面图
     * @param file
     * @param uploadType
     * @param save
     * @param shufflingWidth
     * @param shufflingHeight
     * @param coverWidth
     * @param coverHeight
     * @param isWatermark
     * @param watermarkText
     * @return
     */
    VirtualFile uploadBlogShufflingAndCoverImage(MultipartFile file, String uploadType, boolean save,
                                                 int shufflingWidth, int shufflingHeight,
                                                 int coverWidth, int coverHeight, boolean isWatermark,
                                                 String watermarkText);

    /**
     * 删除文件
     *
     * @param filePath   文件路径
     * @param uploadType 文件类型
     */
    boolean delete(String filePath, String uploadType);
}
